package model;

import entity.Class;
import entity.Mark;
import entity.Subject;
import entity.Student;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author Noi
 */
public class ResultOfClassTableModel extends AbstractTableModel {

    private ArrayList<Student> alStudent;
    private manager.Manager manager;
    private Class c;

    public ResultOfClassTableModel(manager.Manager manager, ArrayList<Student> alStudent, Class c) {
        this.alStudent = alStudent;
        this.manager = manager;
        this.c = c;
    }

    @Override
    public int getRowCount() {
        return this.alStudent.size();
    }

    @Override
    public int getColumnCount() {
        if (c.getClassRoomBlockID() <= 3) {
            return 12;
        } else {
            return 16;
        }
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {

        ArrayList<Subject> alSubject = this.manager.getSubjectManager().getSubjectsByClassRoomBlockId(c.getClassRoomBlockID());

        ArrayList<Mark> alMark = this.manager.getMarkManager().getBySubjectAndStudentID(alStudent.get(rowIndex).getStudentID(), alSubject);

        Mark toan = null, tiengviet = null, daoduc = null, tnxh = null, khoahoc = null, lichsu = null, amnhac = null, mithuat = null, thucong = null, kithuat = null, theduc = null, tinhoc = null, tienganh = null, hanhkiem = null;
        String hocluc = null;

        if (c.getClassRoomBlockID() <= 3) {
            for (Mark mark : alMark) {
                if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("TOÁN")) {
                    toan = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("TIẾNG VIỆT")) {
                    tiengviet = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("ĐẠO ĐỨC")) {
                    daoduc = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("TN & XH")) {
                    tnxh = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("ÂM NHẠC")) {
                    amnhac = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("MĨ THUẬT")) {
                    mithuat = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("THỦ CÔNG")) {
                    thucong = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("THỂ DỤC")) {
                    theduc = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("HẠNH KIỂM")) {
                    hanhkiem = mark;
                }
            }
        } else {
            for (Mark mark : alMark) {
                if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("TOÁN")) {
                    toan = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("TIẾNG VIỆT")) {
                    tiengviet = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("ĐẠO ĐỨC")) {
                    daoduc = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("KHOA HỌC")) {
                    khoahoc = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("LỊCH SỬ & ĐỊA LÝ")) {
                    lichsu = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("ÂM NHẠC")) {
                    amnhac = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("MĨ THUẬT")) {
                    mithuat = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("THỦ CÔNG")) {
                    thucong = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("KĨ THUẬT")) {
                    kithuat = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("THỂ DỤC")) {
                    theduc = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("TIN HỌC")) {
                    tinhoc = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("TIẾNG ANH")) {
                    tienganh = mark;
                } else if (this.manager.getSubjectManager().getById(mark.getSubjectID()).getSubjectName().equals("HẠNH KIỂM")) {
                    hanhkiem = mark;
                }
            }
        }
        if (Integer.valueOf(toan.getYearValue()) >= 9 && Integer.valueOf(tiengviet.getYearValue()) >= 9) {
            hocluc = "LOẠI GIỎI";
        } else if ((Integer.valueOf(toan.getYearValue()) >= 7 && Integer.valueOf(toan.getYearValue()) < 9 && Integer.valueOf(tiengviet.getYearValue()) >= 7) || (Integer.valueOf(tiengviet.getYearValue()) >= 7 && Integer.valueOf(tiengviet.getYearValue()) < 9 && Integer.valueOf(toan.getYearValue()) >= 7)) {
            hocluc = "LOẠI KHÁ";
        } else if ((Integer.valueOf(toan.getYearValue()) >= 5 && Integer.valueOf(toan.getYearValue()) < 7 && Integer.valueOf(tiengviet.getYearValue()) >= 5) || (Integer.valueOf(tiengviet.getYearValue()) >= 5 && Integer.valueOf(tiengviet.getYearValue()) < 7 && Integer.valueOf(toan.getYearValue()) >= 5)) {
            hocluc = "LOẠI TRUNG BÌNH";
        } else {
            hocluc = "LOẠI YẾU";
        }
        if (c.getClassRoomBlockID() <= 3) {
            switch (columnIndex) {
                case 0:
                    return rowIndex + 1;
                case 1:
                    return alStudent.get(rowIndex).getStudentName();
                case 2:
                    return toan.getYearValue();
                case 3:
                    return tiengviet.getYearValue();
                case 4:
                    return daoduc.getYearValue();
                case 5:
                    return tnxh.getYearValue();
                case 6:
                    return amnhac.getYearValue();
                case 7:
                    return mithuat.getYearValue();
                case 8:
                    return thucong.getYearValue();
                case 9:
                    return theduc.getYearValue();
                case 10:
                    return hocluc;
                case 11:
                    if (hanhkiem.getYearValue().equals("Đ")) {
                        return "Thực Hiện Đầy Đủ";
                    } else {
                        return "Thực Hiện Chưa Đầy Đủ";
                    }
                default:
                    return null;
            }
        } else {
            switch (columnIndex) {
                case 0:
                    return rowIndex + 1;
                case 1:
                    return alStudent.get(rowIndex).getStudentName();
                case 2:
                    return toan.getYearValue();
                case 3:
                    return tiengviet.getYearValue();
                case 4:
                    return daoduc.getYearValue();
                case 5:
                    return khoahoc.getYearValue();
                case 6:
                    return lichsu.getYearValue();
                case 7:
                    return amnhac.getYearValue();
                case 8:
                    return mithuat.getYearValue();
                case 9:
                    return thucong.getYearValue();
                case 10:
                    return kithuat.getYearValue();
                case 11:
                    return theduc.getYearValue();
                case 12:
                    return tinhoc.getYearValue();
                case 13:
                    return tienganh.getYearValue();
                case 14:
                    return hocluc;
                case 15:
                    if (hanhkiem.getYearValue().equals("Đ")) {
                        return "Thực Hiện Đầy Đủ";
                    } else {
                        return "Thực Hiện Chưa Đầy Đủ";
                    }
                default:
                    return null;
            }
        }
    }

    @Override
    public String getColumnName(int column) {
        if (c.getClassRoomBlockID() <= 3) {
            switch (column) {
                case 0:
                    return "STT";
                case 1:
                    return "Tên học sinh";
                case 2:
                    return "Toán";
                case 3:
                    return "Tiếng Việt";
                case 4:
                    return "Đạo Đức";
                case 5:
                    return "TN & XH";
                case 6:
                    return "Âm Nhạc";
                case 7:
                    return "Mĩ Thuật";
                case 8:
                    return "Thủ Công";
                case 9:
                    return "Thể Dục";
                case 10:
                    return "Học Lực";
                case 11:
                    return "Hạnh Kiểm";
                default:
                    return null;
            }
        } else {
            switch (column) {
                case 0:
                    return "STT";
                case 1:
                    return "Tên học sinh";
                case 2:
                    return "Toán";
                case 3:
                    return "Tiếng Việt";
                case 4:
                    return "Đạo Đức";
                case 5:
                    return "Khoa Học";
                case 6:
                    return "Lịch Sử & Địa Lý";
                case 7:
                    return "Âm Nhạc";
                case 8:
                    return "Mĩ Thuật";
                case 9:
                    return "Thủ Công";
                case 10:
                    return "Kĩ Thuật";
                case 11:
                    return "Thể Dục";
                case 12:
                    return "Tin Học";
                case 13:
                    return "Tiếng Anh";
                case 14:
                    return "Học Lực";
                case 15:
                    return "Hạnh Kiểm";
                default:
                    return null;
            }
        }
    }
}